package br.com.aerusc.gui.panel;

import java.util.logging.Logger;

import br.com.aerusc.entity.Jogador;
import br.com.aerusc.gui.components.RootComponents;
import br.com.aerusc.gui.forms.JogadorForm;
import br.com.aerusc.persistence.dao.JogadorDAO;

import com.vaadin.data.util.BeanItem;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Form;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Window;

public class PanelCadastroJogadores extends Panel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */
	private GridLayout gridLayout;
	private Jogador jogador;
	private Form jogadorForm;
	private Window windowInformacoes;
	private Button buttonSalvar;
	private Button buttonLimpar;
	private Button buttonDeletar;
	private static final Logger log = Logger.getLogger(PanelCadastroJogadores.class.getName());

	public PanelCadastroJogadores() {
		super();
		this.jogador = new Jogador();
		preencherForm();
		gridLayout = new GridLayout(3, 1);
		gridLayout.addComponent(getButtonSalvar(), 0, 0);
		gridLayout.addComponent(getButtonLimpar(), 1, 0);
		addComponent(jogadorForm);
		addComponent(gridLayout);
	}

	public PanelCadastroJogadores(Jogador entidade) {
		super();
		this.jogador = entidade;
		preencherForm();
		gridLayout = new GridLayout(3, 1);
		gridLayout.addComponent(getButtonSalvar(), 0, 0);
		gridLayout.addComponent(getButtonLimpar(), 1, 0);
		gridLayout.addComponent(getButtonDeletar(), 2, 0);
		addComponent(jogadorForm);
		addComponent(gridLayout);
	}

	public void preencherForm() {
		BeanItem<Jogador> jogadorItem = new BeanItem<Jogador>(jogador);
		jogadorForm = new JogadorForm(jogadorItem);
		jogadorForm.setImmediate(true);
		jogadorForm.setWriteThrough(false);

	}

	public Button getButtonSalvar() {
		buttonSalvar = new Button("Salvar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				try {
					jogadorForm.commit();
				} catch (Exception e) {
					log.warning(e.getMessage());
					return;
				}
				JogadorDAO dao = new JogadorDAO();
				jogador = dao.salvar(jogador);
				if (jogador != null) {
					RootComponents.getMainWindow().addWindow(getWindowInformacoes("Jogador Salvo com Sucesso!"));
				}

			}

		});
		buttonSalvar.setClickShortcut(KeyCode.ENTER);
		return buttonSalvar;
	}

	public Button getButtonLimpar() {
		buttonLimpar = new Button("Limpar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				try {
					jogadorForm.discard();
				} catch (Exception e) {
					log.warning(e.getMessage());
					return;
				}
			}

		});
		return buttonLimpar;
	}

	public Button getButtonDeletar() {
		buttonDeletar = new Button("Deletar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				JogadorDAO dao = new JogadorDAO();
				dao.remover(jogador);
				RootComponents.getMainWindow().addWindow(getWindowInformacoes("Jogador Removido com Sucesso !"));

			}

		});
		return buttonDeletar;
	}

	public Window getWindowInformacoes(String label) {
		windowInformacoes = new Window("Sucesso");
		windowInformacoes.addComponent(new Label(label));
		windowInformacoes.setWidth("200px");
		windowInformacoes.setHeight("100px");
		windowInformacoes.setModal(true);
		windowInformacoes.setClosable(false);
		Button buttonConfirmar = new Button("Confirmar", new Button.ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				try {
					windowInformacoes.setVisible(false);
					windowInformacoes.detach();
					RootComponents.getHorizontalSplitLayout().setSecondComponent(new PanelCadastroJogadores());
				} catch (Exception e) {
					log.warning(e.getMessage());
					return;
				}
			}

		});
		buttonConfirmar.focus();
		buttonConfirmar.setClickShortcut(KeyCode.ENTER);
		windowInformacoes.addComponent(buttonConfirmar);

		return windowInformacoes;
	}

}
